package com.sykj.why.mongo.service;


import com.sykj.why.mongo.document.BaseDocument;
import org.springframework.data.mongodb.core.query.Query;


import java.util.List;

/**
 * @author
 */
public interface BasicService<T extends BaseDocument>{
	/**
	 * 保存
	 * @param entity
	 */
	public void save(T entity);

	/**
	 *  更新或者保存
	 * @param entity
	 */
	public void saveOrupdate(T entity);

	/**
	 * 删除，逻辑删除
	 * @param entity
	 */
	public void remove(T entity);

	/**
	 * 根据ID删除，物理删除
	 * @param entity
	 */
	public void delete(T entity);

	/**
	 *  查找全部
	 * @param cls
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<T> findAll(Class cls);

	/**
	 * 根据条件查询所有数据
	 *
	 * @param query
	 * @param t
	 * @return
	 */
	public List<T> findAll(Query query, Class<T> t);

	/**
	 * 根据删除标记获取所有数据
	 *
	 * @param t
	 * @param removed
	 * @return
	 */
	public List<T> findAll(Class<T> t, boolean removed);
	/**
	 * 去重复查询
	 * @param collection
	 * @param key
	 * @return
	 */
	public List<T> findDistinctAll(String collection, String key);


	public int getPageSize(int totalCount,int lineSize);

	/**
	 * 根据条件分页查询所有数据
	 * @param query
	 * @param t
	 * @return
	 */
	public List<T> findByPage(Query query, int currentPage, int lineSize, Class<T> t);


	/**
	 * 根据ID查找
	 * @param cls
	 * @param id
	 * @param removed
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public T get(Class cls, String id, boolean removed);

	/**
	 * 根据ID查找
	 * @param cls
	 * @param id
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public T get(Class cls, String id);

	/**
	 *  一个参数得到相应信息
	 * @param fieldName
	 * @param getValue
	 * @param cls
	 * @param removed
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public T get(String fieldName, Object getValue, Class cls, boolean removed);

	/**
	 * 两个个参数得到相应信息
	 * @param fieldNameOne
	 * @param getValueOne
	 * @param fieldNameTwo
	 * @param getValueTwo
	 * @param cls
	 * @param removed
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public T get(String fieldNameOne, Object getValueOne, String fieldNameTwo, Object getValueTwo, Class cls, boolean removed);

	/**
	 * 修改
	 * @param fieldName
	 * @param updatevalue
	 * @param id
	 * @param entity
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public boolean update(String fieldName, Object updatevalue, String id, Class entity);

	/**
	 * 修改全部
	 * @param fieldName
	 * @param updatevalue
	 * @param updateId
	 * @param id
	 * @param entity
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public boolean updateAll(String fieldName, Object updatevalue, String updateId, String id, Class entity);

	/**
	 * 查询数据的总数
	 * @param fieldName
	 * @param selRemoved
	 * @param entity
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public long count(String fieldName, Object selRemoved, Class entity);


	T findOne(Query query, Class<T> t);

	/**
	 *  查询数据的总数
	 * @param fieldName
	 * @param selRemoved
	 * @param removed
	 * @param entity
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public long count(String fieldName, Object selRemoved, boolean removed, Class entity);

	/**
	 * 查询数据的总数
	 * @param fieldNameOne
	 * @param selRemovedOne
	 * @param fieldNameTwo
	 * @param selRemovedTwo
	 * @param removed
	 * @param entity
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public long count(String fieldNameOne, Object selRemovedOne, String fieldNameTwo, Object selRemovedTwo, boolean removed, Class entity);

	/**
	 * 根据条件查询所有的记录的总数
	 * @param query
	 * @param entity
	 * @return
	 */
	public long count(Query query, Class<T> entity);


	/**
	 * 验证是否拿到机构Id
	 * @param orgId
	 * @return
	 */
	/*public void verifyOrgId(String orgId);*/

}
